#ifndef FILEINFO_H
#define FILEINFO_H

#include <QString>
#include <QVariant>
#include <QProcess>
#include <QtDBus>

#define FILEINFO_CONTENT_TYPE_IMAGE "image"
#define FILEINFO_CONTENT_TYPE_VIDEO "video"
#define FILEINFO_CONTENT_TYPE_AUDIO "audio"
#define FILEINFO_CONTENT_TYPE_TEXT "text"
#define FILEINFO_CONTENT_TYPE_UNKNOWN "unknown"

class FileInfo
{
public:
    enum FILE_TYPE {
        TYPE_DIR = 0,   // 文件夹
        TYPE_TXT = 1,   // 文本文件
        TYPE_AUDIO = 2, // 音频
        TYPE_VIDEO = 3, // 视频
        TYPE_IMAGE = 4, // 图片
        TYPE_DOC,       // word
        TYPE_PDF,       // pdf
        TYPE_EXCEL,     // excel
        TYPE_PPTX,      // ppt
        TYPE_ZIP,       // zip
        TYPE_OTHER,     // 其他
    };

public:
    FileInfo();
    FileInfo(const FileInfo &fileInfo);

    FileInfo &operator=(const FileInfo &fileInfo);
    friend QDBusArgument &operator<<(QDBusArgument &argument, const FileInfo &fileInfo);
    friend const QDBusArgument &operator>>(const QDBusArgument &argument, FileInfo &fileInfo);

    static void registerMetaType();

    QString name() const;
    void setName(const QString &name);

    qint64 size() const;
    void setSize(const qint64 &size);

    int type() const;
    void setType(int type);

    QString dateTime() const;
    void setDateTime(const QString &dateTime);

    QString getThumbnailPath() const;
    void setThumbnailPath(const QString &value);

    int getId() const;
    void setId(int value);

    QString getPath() const;
    void setPath(const QString &path);

    QString getDate() const;
    void setDate(const QString &date);

    QString getContentType() const;

    static FileInfo::FILE_TYPE judgmentType(QString fileName);

    static void fileOpen(QString fileName);
    static QMap<QString, QString> initMimeMap();
    static QMap<QString, QString> initIconNameMap();
    static QString contentType(QString flag);
    static QString iconName(QString flag);

    operator QVariant() const
    {
        return QVariant::fromValue(*this);
    }

private:
    int m_id = 0;                 // 文件id
    QString m_name = "";          // 文件名
    QString m_path = "";          // 文件路径
    qint64 m_size = 0;            // 文件大小
    int m_type = 0;               // 文件类型
    QString m_date = "";          // 时间
    QString m_dateTime = "";      // 详细时间
    QString m_thumbnailPath = ""; // 缩略图路径
    QString m_contentType = "";   // 文件类型描述
    static QMap<QString, QString> mimeMapTable;
    static QMap<QString, QString> iconNameMapTable;
};
Q_DECLARE_METATYPE(FileInfo)
#endif // FILEINFO_H
